package ca.etsmtl.log120.tp1.shapehierarchy;

import java.awt.Color;
import java.awt.Graphics;


/******************************************************
Cours : LOG120
Session : E2011
Groupe : 01
Projet : Laboratoire #2
Etudiants : Nicolas Blais Miko
 	 		Yohan Trepanier-Montpetit
Codes perm. : BLAN24079109
			  TREY
Professeur : Chamseddine Talhi
Charge de labo : Eric Goulet
Nom du fichier : Oval.java
Date cree : 2011-05-18
Date dern. modif. 2015-05-23
*************************************************** ****
Historique des modifications
*************************************************** ****
2011-05-18 Version initiale (Nicolas Blais Miko)
2011-05-24 Implementation de drawShape() (Yohan Trepanier)
***************************************************/

/**
 * Classe permettant de representer un Oval
 * @param hRadius Le rayon horizontal de l'oval
 * @param vRadius Le rayon vertical de l'oval
 */
public class Oval extends AbstractShape{

	private static final int SHAPE_ID = 3;
	private int hRadius; //Le rayon horizontal de l'oval
	private int vRadius; //Le rayon vertical de l'oval
	private Color color = Color.black;
	
	/**
	 * 
	 * CONSTRUCTEURS
	 * 
	 */
	
	/**
	 * Constructeur par defaut
	 */
	public Oval(){}
	
	/**
	 * Constructeur parametrique
	 * @param nseq Le numero de sequence de la forme
	 * @param posX La position en X de la forme
	 * @param posY La position en Y de la forme
	 * @param hRadius Le rayon horizontal de l'oval
	 * @param vRadius Le rayon vertical de l'oval
	 */
	public Oval(int nseq, int posX, int posY, int hRadius, int vRadius){
		
		super(nseq,posX,posY,SHAPE_ID);
		this.hRadius = hRadius;
		this.vRadius = vRadius;
	}
	
	/**
	 * Constructeur par copie d'objet
	 * @param o L'oval a construire
	 */
	public Oval(Oval o){
		
		super(o.getNseq(),o.getPosX(),o.getPosY(),SHAPE_ID);
		hRadius = o.getHRasius();
		vRadius = o.getVRadius();
	}

	/**
	 * 
	 * ACCESSEURS
	 * 
	 */
	
	public int getHRasius() {

		return hRadius;
	}
	
	public int getVRadius() {

		return vRadius;
	}

	/**
	 * 
	 * COMPORTEMENTS
	 * 
	 */
	
	/**
	 * Methode qui decrit un oval avec une chaine de caractere
	 */
	public String toString(){
		
		return super.toString() + "rayon horizontal: " + hRadius + " rayon vertical: " + vRadius + " Type de forme: Oval";
	}
	
	/**
	 * Methode qui retourne true si l'oval recu en parametre est identique a l'oval qui appel
	 * @param shape L'oval avec lequel on compare
	 * @return vrai si les deux ovals sont identiques
	 */
	public boolean equals(Object obj){
		Oval shape = (Oval)obj;
		return super.equals(shape) && hRadius == shape.hRadius && vRadius == shape.vRadius;
	}
	
	/**
	 * Methode qui retourne un copie de l'oval recu en parametre
	 * @param o L'oval a copier
	 * @return Une instance de oval identique a l'oval recu
	 */
	public Oval copyOf(){
		
		return new Oval(this);
	}
	
	@Override
	public void drawShape(Graphics g2d) {
		g2d.setColor(color );
		g2d.fillOval(posX, posY, hRadius, vRadius);
		
	}

	@Override
	public double getAire() {
		
		return Math.PI*vRadius*hRadius;
	}

	@Override
	public int getHauteur() {
		return 2*hRadius;
	}

	@Override
	public int getLargeur() {
		
		return 2*vRadius;
	}

	@Override
	public double getDistance() {
		
		return 2*vRadius;
	}

	@Override
	public void setPosition(int x, int y) {
		
		posX = x;
		posY = y;
	}
}
